
package basic;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

/**
 * DispatcherServlet(在 web.xml 有定義 url pattern)負責分配請求給控制物件(controller), 在 spring Web MVC frame, 控制物件要實作<br>
 * Controller interface,並實做 handleReauest(request:HttpServletRequest, response:HttpServletResponse).<br>
 * <br>
 * 當 controller 收到 DispatchServlet 分配的請求, 會執行 hangleRequest() 方法來處理請求, 處理完畢後回傳一個 ModelAndView instance, <br>
 * ModelAndView 包括了要呈理在 View 層的 Model 資料, 以及其它 View 層的相關訊息.<br>
 * 
 * 
 * @author Eric.Kao(gau168.gau@msa.hinet.net)
 * @version 1.0
 * @company E885 Group
 * @copyright Copyright (c) 2001-2008
 */

public class HelloController implements Controller
{
	// forward to page, 但不包括路徑和副檔名, 會由 spring 注入(可參考 mvc-config.xml)
	private String viewPage;

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.springframework.web.servlet.mvc.Controller#handleRequest(javax.servlet.http.HttpServletRequest,
	 *      javax.servlet.http.HttpServletResponse)
	 */
	public ModelAndView handleRequest( HttpServletRequest request, HttpServletResponse response ) throws Exception
	{
		String userName = request.getParameter( "userName" );

		// 第一個 Argument:呈現的目標網頁(或資源)路徑.
		// 第二個 Argument:設定用來取得 Model 物件的 key.
		// 第三個 Argument:給 view 層呈現資料的 Model instance.
		return new ModelAndView( viewPage, "userNameKey", userName );
	}

	/**
	 * 會由 spring injection
	 * 
	 * @param viewPage the viewPage to set
	 */
	public void setViewPage( String viewPage )
	{
		this.viewPage = viewPage;
	}

}
